/**
 * 开发
 * @author xiufu.wang
 */
 const config = require('../../build/config');
 const mock = require('../../build/mock');
 const path = require('path');
 const webpack = require('webpack');
 const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 const CopyWebpackPlugin = require('copy-webpack-plugin');
 const HtmlWebpackPlugin = require('html-webpack-plugin');
 const ProgressBarPlugin = require('progress-bar-webpack-plugin');
 const VueLoaderPlugin = require('vue-loader/lib/plugin');
 const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
 const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
 const launchEditorMiddleware = require('launch-editor-middleware');
 const TerserPlugin  = require('terser-webpack-plugin')
 const webpackConfig = {
     mode: process.env.NODE_ENV,
     entry: './cli/code-gen/web/entry.js',
     output: {
         path: path.resolve(__dirname, './dist'),
         publicPath: '',
         filename: '[name].[hash:7].js',
         chunkFilename: '[name].js'
     },
     resolve: {
         extensions: ['.js', '.vue', '.json', '.jsx'],
         alias: config.alias,
         modules: ['node_modules']
     },
     performance: {
         hints: false
     },
     stats: {
         children: false
     },
     module: {
         rules: [
             {
                 test: /\.(jsx?|babel|es6|js)$/,
                 include: process.cwd(),
                 exclude: config.jsexclude,
                 loader: 'babel-loader'
             },
             {
                 test: /\.vue$/,
                 loader: 'vue-loader',
                 options: {
                     compilerOptions: {
                         preserveWhitespace: false
                     }
                 }
             },
             {
                 test: /\.(scss|css)$/,
                 use: [
                    'style-loader',
                     'css-loader',
                     'sass-loader'
                 ]
             },
             {
                 test: /\.md$/,
                 use: [
                     {
                         loader: 'vue-loader',
                         options: {
                             compilerOptions: {
                                 preserveWhitespace: false
                             }
                         }
                     },
                     {
                         loader: path.resolve(__dirname, './md-loader/index.js')
                     }
                 ]
             },
             {
                 test: /\.(svg|otf|ttf|woff2?|eot|gif|png|jpe?g)(\?\S*)?$/,
                 loader: 'url-loader',
                 // todo: 这种写法有待调整
                 query: {
                     limit: 10000,
                     name: path.posix.join('static', '[name].[hash:7].[ext]')
                 }
             }
         ]
     },
     plugins: [
         new webpack.HotModuleReplacementPlugin(),
         new HtmlWebpackPlugin({
           template: './cli/code-gen/index.tpl',
           filename: './index.html',
           favicon: './examples/favicon.png'
         }),
         new ProgressBarPlugin(),
         new VueLoaderPlugin(),
         new webpack.DefinePlugin({
           'process.env.FAAS_ENV': JSON.stringify(process.env.FAAS_ENV)
         }),
         new webpack.LoaderOptionsPlugin({
           vue: {
             compilerOptions: {
               preserveWhitespace: false
             }
           }
         })
       ],
       optimization: {
         minimizer: [new TerserPlugin({sourceMap: false})]
       },
       devtool: 'none'
 }
 
 module.exports = webpackConfig;